/* ************************************************************************
> File Name:     5.c
> Author:        zhfu
> mail:          3346897597@qq.com
> Created Time:  2022年04月27日 星期三 16时10分59秒
> Description:   
 ************************************************************************/
#include<stdio.h>
#include<stdarg.h>
#include<stdlib.h>

void int_to_char(int d)
{
    char c = '0';

    if (!d){
        return;
    }

    int y = d % 10;
    d /= 10;
    int_to_char(d);
    putchar(y + c);
}

void double_to_char(double f)
{
    
}

void my_printf(const char *format, ...)
{
    va_list ap;
    char c;

    va_start(ap, format);

    while (c = *format++){
        if (c == '%'){
            switch (c = *format++){
                case 'c':{
                    char ch = va_arg(ap, int);
                    putchar(ch);
                    break;
                }
                case 's':{
                    char *p = va_arg(ap, char *);
                    fputs(p, stdout);
                    break;
                }
                case 'd':{
                    int d = va_arg(ap, int);
                    if (d < 0){
                        putchar('-');
                        d = -d;
                    }
                    int_to_char(d);
                    break;
                }

                case 'f':{
                    double f = va_arg(ap, double);
                    if (f < 0){
                        putchar('-');
                        f = -f;
                    }
                    double_to_char(f);
                    break;
                }
                default:{
                    if (c == '%'){
                        putchar(c);
                    }
                    else{
                        abort();
                    }
                }
            }

        }
        else{
            putchar(c);
        }
    }
    va_end(ap);
}

int main()
{
    my_printf("%%Hello%c! %d\n", ' ', -2022);

    return 0;
}
